<?php
/**
 * 订单模型
 * @author maniac
 */
namespace app\common\model;

use app\common\model\OrderGoods AS OrderGoodsModel;
use app\common\model\WechatUsers AS WechatUsersModel;

class OrdersRefund extends SoftDel
{
    public $tableName = '订单';                  // 数据表名称
    public $logId     = ['id', 'order_no'];     // 日志操作相关标识
    public $softId    = 1;                      // 软删除标识
    
    public $insert = ['create_time'];
    
    /**
     * 订单创建时间修改器
     * @param string $value 字段值
     */
    public function setCreateTimeAttr($value)
    {
        return time();
    }
    
    /**
     * 支付时间获取器
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getPayTimeDateAttr($value, $data)
    {
        return $data['pay_time'] ? date('Y-m-d H:i:s', $data['pay_time']) : '';
    }
    
    /**
     * 发货时间获取器
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getSendTimeDateAttr($value, $data)
    {
        return $data['send_time'] ? date('Y-m-d H:i:s', $data['send_time']) : '';
    }
    
    /**
     * 签收时间获取器
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getSignTimeDateAttr($value, $data)
    {
        return $data['sign_time'] ? date('Y-m-d H:i:s', $data['sign_time']) : '';
    }
    
    /**
     * 订单完成时间获取器
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getFinishTimeDateAttr($value, $data)
    {
        return $data['finish_time'] ? date('Y-m-d H:i:s', $data['finish_time']) : '';
    }
    
    /**
     * 支付方式名称
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getPayTypeNameAttr($value, $data)
    {
        $name = ['', '微信支付', '货到付款', '积分支付', '抵用券支付', '余额支付'];
        return $name[$data['pay_type']];
    }
    
    /**
     * 订单创建时间获取器
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getCreateTimeDateAttr($value, $data)
    {
        return date('Y-m-d H:i:s', $data['create_time']);
    }

    /**
     * 配送员获取器
     * @param string $value 字段值
     * @param array  $data  所有数据
     */
    public function getShippingUserAttr($value, $data)
    {
        if ($data['shipping_userid']) {
            $user = WechatUsersModel::field('nickname')->where('member_id', $data['shipping_userid'])->find();
            return $user['nickname'];
        }
        return '';
    }
    
    /**
     * 获取订单商品列表
     * @param string $value 字段值
     * @param array  $data  全部数据
     */
    public function getGoodsListAttr($value, $data)
    {
        $fields = 'goods_id,goods_name,sku_id,sku_name,sale_price,goods_nums,image_uri';
        $module = request()->module();
        if ($module == 'manage') {
            $fields .= ',cost_price';
        }
        return OrderGoodsModel::field($fields)->where('order_id', $data['id'])->order('id ASC')->select();
    }
    
    /**
     * 获取订单状态文本
     * @param  string $value 字段值
     * @param  array  $data  全部数据
     */
    public function getOrderStatusTxtAttr($value, $data)
    {
        $txt = [
            0 => '待确认',
            1 => '订单已确认',
            2 => '订单已取消',
            3 => '订单已关闭',
            4 => '待付款',
            5 => '待发货',
            6 => '待收货',
            7 => '申请退货',
            8 => '退货中',
            9 => '已退货',
            10 => '申请退款',
            11 => '退款中',
            12 => '拒绝退款',
            13 => '已退款',
            14 => '已收货',
            15 => '已完成',
        ];
        $txtId = $this->getOrderStatusIdAttr($value, $data);
        return $txt[$txtId];
    }
    /**
     * 获取订单状态标识
     * @param  string $value 字段值
     * @param  array  $data  全部数据
     */
    public function getOrderStatusIdAttr($value, $data)
    {
        // order_status 订单状态，0：未确认；1：已确认；2：已取消；3：已关闭；4：申请退货；5：申请退款；255：订单已完成；
        // pay_status 支付状态，0：未支付；1：已支付；2：退款中；3：拒绝退款；4：已退款；
        // shipping_status 配送状态，0：未发货；1：已发货，配送中；2：已收货；3：退货中；4：已退货；
        if ($data['order_status'] == 0) {
            // 未确认
            $txtId = 0;
        } elseif ($data['order_status'] == 1) {
            // 已确认
            $txtId = 1;
            if ($data['pay_status'] == 0) {
                // 未支付
                $txtId = 4;
                if ($data['pay_type'] == 2) {
                    // 货到付款，待发货
                    $txtId = 5;
                }
            } elseif ($data['pay_status'] == 1) {
                // 已支付，待发货
                $txtId = 5;
                if ($data['shipping_status'] == 0) {
                    // 未发货
                    $txtId = 5;
                } elseif ($data['shipping_status'] == 1) {
                    // 已发货，配送中
                    $txtId = 6;
                } elseif ($data['shipping_status'] == 2) {
                    // 已收货
                    $txtId = 14;
                }
            } elseif ($data['pay_status'] == 2) {
                // 退款中
                $txtId = 11;
            } elseif ($data['pay_status'] == 3) {
                // 拒绝退款
                $txtId = 12;
            } elseif ($data['pay_status'] == 4) {
                // 已退款
                $txtId = 13;
            }
        } elseif ($data['order_status'] == 2) {
            // 订单已取消
            $txtId = 2;
        } elseif ($data['order_status'] == 3) {
            // 订单已关闭
            $txtId = 3;
        } elseif ($data['order_status'] == 4) {
            // 申请退货
            $txtId = 7;
            if ($data['shipping_status'] == 3) {
                // 退货中
                $txtId = 8;
            } elseif ($data['shipping_status'] == 4) {
                // 已退货
                $txtId = 9;
            }
        } elseif ($data['order_status'] == 5) {
            // 申请退款
            $txtId = 10;
            if ($data['pay_status'] == 2) {
                // 退款中
                $txtId = 11;
            } elseif ($data['pay_status'] == 3) {
                // 拒绝退款
                $txtId = 12;
            } elseif ($data['pay_status'] == 4) {
                // 已退款
                $txtId = 13;
            }
        } elseif ($data['order_status'] == 255) {
            $txtId = 15;
        }
        return $txtId;
    }
}
